import type { App } from "vue";
import { isEmpty } from "@/utils/common";
import { messageSuccess } from "@/utils/message";

/**
 * 自定义复制指令
 * @description 使用方式：v-copy="[val,callback,isMessage]"，如 `<div v-copy="['复制链接',function(){}]"></div>`
 * @description val-复制参数 callback-回调函数 isMessage-是否弹出提示
 */
export default (app: App) => {
    app.directive("copy", {
        mounted(el, binding) {
            if (isEmpty(binding.value[0])) return false;

            const value = binding.value[0];
            const callback = isEmpty(binding.value[1])
                ? null
                : binding.value[1];
            const isMessage = isEmpty(binding.value[2])
                ? true
                : binding.value[2];

            el.addEventListener("click", () => {
                // #ifdef H5
                const input = document.createElement("input"); // 创建一个input元素用于复制
                input.value = value; // 设置input的值为绑定的值
                document.body.appendChild(input); // 添加到body中
                input.select(); // 选中input的值
                document.execCommand("copy"); // 执行复制操作
                document.body.removeChild(input); // 移除input元素

                typeof callback == "function" && callback();
                uni.hideKeyboard();
                if (isMessage) messageSuccess("复制成功");
                // #endif

                // #ifdef MP || APP-PLUS
                uni.setClipboardData({
                    data: value,
                    success: () => {
                        typeof callback == "function" && callback();
                        if (isMessage) messageSuccess("复制成功");
                    },
                });
                // #endif
            });
        },
    });
};
